package com.yf.internedstring;

import java.util.HashSet;
import java.util.Set;

/**
 * StringTable OutOfMemoryError测试
 *
 * JDK6: -XX:PermSize=6m -XX:MaxPermSize=6m -Xms6m -Xmx6m
 * Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
 *
 * JDK8: -XX:MetaspaceSize=6m -XX:MaxMetaspaceSize=6m -Xms6m -Xmx6m
 * Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 */
public class StringTableOOMTest {
    public static void main(String[] args) {
        // 使用Set保持着常量池引用，避免full gc回收常量池行为
        Set<String> set = new HashSet<String>();
        // 在short取值范围内足以让6MB的PerSize或heap产生OOM了
        short i = 0;
        while (true) {
            set.add(String.valueOf(i++).intern());
        }
    }
}
